home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 141 / Gekkan Dennou Club - 2000.2 Vol. 141 (Japan) (Track 1).bin / docs / asm / rasclr.s < prev    next >
Encoding:
Text File  |  2000-01-10  |  2.1 KB  |  87 lines

  1. ;----------------------------------------------------------------
  2. ;テキスト画面のクリア
  3.  
  4.     .include    doscall.mac
  5.     .include    iocscall.mac
  6.  
  7. ;----------------------------------------------------------------
  8. ;ラスタコピーマクロ
  9. ;<an.l:$00E88001に固定してあるアドレスレジスタ
  10. ;<dn.w:ソースラスタブロック番号*$0100+デスティネーションラスタブロック番号が
  11. ;    入っているレジスタ
  12. ;<sn.w:srを保存してあるレジスタ
  13. RASCPY    .macro    an,dn,sn
  14. @_1:    tst.b    (a0)            ;水平帰線期間を待つ
  15.     bmi    @_1
  16.     ori.w    #$0700,sr        ;割り込み禁止
  17. @_2:    tst.b    (a0)            ;水平表示期間を待つ
  18.     bpl    @_2
  19.     move.w    dn,($00E8002C-$00E88001,an)    ;ラスタブロック番号を設定
  20.     move.w    #8,($00E80480-$00E88001,an)    ;ラスタコピー実行
  21.     move.w    sn,sr            ;割り込み許可
  22.     .endm
  23.  
  24. ;----------------------------------------------------------------
  25. ;ラスタコピー終了マクロ
  26. ;<an.l:$00E88001に固定してあるアドレスレジスタ
  27. RASEND    .macro    an
  28. @_1:    tst.b    (a0)            ;水平帰線期間を待つ
  29.     bmi    @_1
  30. @_2:    tst.b    (a0)            ;水平表示期間を待つ
  31.     bpl    @_2
  32.     move.w    #$0000,($00E80480-$00E88001,a0)    ;ラスタコピー終了(clrは避ける)
  33.     .endm
  34.  
  35. ;----------------------------------------------------------------
  36. ;----------------------------------------------------------------
  37. ;メインルーチン
  38.  
  39. ;スーパーバイザモードへ移行
  40.     clr.l    -(sp)
  41.     DOS    _SUPER
  42.     move.l    d0,(sp)
  43.  
  44. ;カーソル消去
  45.     IOCS    _B_CUROFF
  46.  
  47.     move.w    $00E8002A,-(sp)
  48.  
  49. ;ラスタブロック255をクリア
  50.     move.w    #$0130,$00E8002A    ;プレーン0,1同時アクセス
  51.     moveq.l    #0,d0
  52.   .irp %r,d1,d2,d3,d4,d5,d6
  53.     move.l    d0,%r
  54.   .endm
  55.   .irp %r,a0,a1,a2,a3,a4,a5
  56.     movea.l    d0,%r
  57.   .endm
  58.     lea.l    $00E20000,a6
  59.   .rept 9
  60.     movem.l    d0-d6/a0-a5,-(a6)
  61.   .endm
  62.     movem.l    d0-d6/a0-a3,-(a6)
  63.  
  64. ;1ラスタブロックずつコピー
  65.     lea.l    $00E88001,a0        ;$00E88001に固定
  66.     move.w    #$0001,d2        ;ラスタブロック番号の増分
  67.     move.w    #%0011,($00E8002A-$00E88001,a0)    ;ラスタコピープレーンセレクト
  68.     move.w    sr,d3            ;srを保存
  69.     move.w    #$FF00,d0        ;ラスタブロック255→0,…,255→127
  70.     moveq.l    #128-1,d1
  71. 1:    RASCPY    a0,d0,d3
  72.     add.w    d2,d0
  73.     dbra    d1,1b
  74.     RASEND    a0
  75.  
  76.     move.w    (sp)+,$00E8002A
  77.  
  78. ;カーソル表示
  79.     IOCS    _B_CURON
  80.  
  81. ;ユーザモードに復帰
  82.     DOS    _SUPER
  83.     addq.l    #4,sp
  84.  
  85. ;終了
  86.     DOS    _EXIT
  87.